﻿Class MainWindow

    Public Class MemoryHog
        Public Property Text As String
        Public Property id As Integer
    End Class

    'fake a memory leak by just keeping a reference to these objects
    Private mObjectsInMemory As New List(Of Object)

    Private Sub GenerateButton_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs)
        Dim num As Integer = 0
        Dim id As Integer = mObjectsInMemory.Count
        If Integer.TryParse(NumberText.Text, num) Then
            For i As Integer = 0 To num - 1
                Dim hog As New MemoryHog() With {.id = id + i, .Text = LongText}
                mObjectsInMemory.Add(hog)
            Next
            CurrentCountText.Text = mObjectsInMemory.Count().ToString
        Else
            MessageBox.Show("Please input a valid integer for number of objects to create.")
        End If
    End Sub

    Private ReadOnly Property LongText As String
        Get
            Return "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc id lacus lectus, at pellentesque ante. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Sed sit amet sagittis ligula. Nam bibendum hendrerit hendrerit. Quisque dui elit, blandit et sagittis in, adipiscing et mi. Mauris orci urna, tempus et consequat ac, suscipit vitae sapien. Pellentesque pellentesque, quam nec scelerisque condimentum, lacus nisl venenatis orci, ut imperdiet mauris felis in massa. Aliquam erat volutpat. Aenean vel lorem in ligula feugiat scelerisque. Aliquam vestibulum luctus lectus eget aliquam." & _
                " Aliquam lectus nisl, varius ut congue id, aliquet ut felis. Suspendisse bibendum purus non leo hendrerit vel accumsan tortor bibendum. Etiam convallis odio id neque placerat ac interdum risus facilisis. Quisque fermentum arcu eget ipsum cursus a molestie massa tincidunt. Pellentesque tincidunt mi at lacus aliquam quis bibendum elit venenatis. Aenean eu eros nec elit sollicitudin aliquet vitae nec risus. Maecenas ultrices feugiat augue at lacinia." & _
                " Etiam ac dui cursus libero semper bibendum quis vel neque. Vestibulum sed mauris ante. In euismod tortor et urna posuere interdum. Morbi ullamcorper lacinia tincidunt. Duis ac lacus tellus. Praesent nec molestie lacus. Integer luctus eleifend auctor. Nulla consectetur venenatis lacus, sit amet ultricies turpis aliquam eu. " & _
                "Fusce pharetra nulla sed velit vulputate pharetra mattis mauris consectetur. Aliquam viverra porttitor metus, id gravida ipsum vulputate quis. Sed sit amet nibh dolor, at pulvinar arcu. Quisque libero urna, vehicula consequat fringilla ac, eleifend vel velit. Sed volutpat mauris ac justo sagittis cursus. Sed neque enim, viverra a mollis eget, elementum vel dui. Praesent luctus ultrices dolor ut suscipit. Integer malesuada tellus a nunc semper luctus. Suspendisse vulputate faucibus iaculis. Cras venenatis molestie sem, et hendrerit orci tempor non. Nulla faucibus, elit eu condimentum laoreet, eros felis fermentum dolor, at fermentum lacus purus a leo. Integer pellentesque ligula auctor est consectetur nec congue ante elementum. Integer eu ligula a ante mattis sodales. Nunc iaculis lorem sed ipsum lobortis commodo non non dolor. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Curabitur vel euismod nunc." & _
                "Cras quis nisi enim. Donec at lectus nulla. Donec mattis pretium enim sed ornare. Vestibulum vel felis sem. Praesent ultricies magna sit amet nisl eleifend a mattis urna tincidunt. Nullam posuere, mi a hendrerit blandit, ipsum odio feugiat tortor, vel cursus nunc eros eu elit. Proin ac metus ut erat iaculis vehicula quis a tortor. Nunc ultricies tellus a diam vestibulum eleifend. Aenean faucibus egestas lacinia. Integer pulvinar rhoncus tellus et mattis. In hac habitasse platea dictumst. Praesent fermentum, lectus semper condimentum lacinia, justo leo laoreet est, ut posuere ligula felis vitae diam."
        End Get
    End Property

    Private Sub GCButton_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs)
        'if a real memory leak we want to make sure that all non-rooted objects have a chance to be GC "normally"
        '   all objects that in memory after this are either in use or rooted (stuck)
        GC.Collect(2)
        GC.WaitForPendingFinalizers()
        GC.Collect(2)
        GC.WaitForPendingFinalizers()
    End Sub

    Private Sub BreakButton_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs)
        If Diagnostics.Debugger.IsAttached Then
            Diagnostics.Debugger.Break()
        End If
    End Sub

End Class
